package org.jaaksi.customviewdemo.dispath

import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.ViewConfiguration
import android.widget.FrameLayout
import android.widget.Toast
import kotlin.math.abs

fun getEventName(event: MotionEvent): String {
    return when (event.action) {
        // down事件必须return true，否则后续事件不会再传递给它
        MotionEvent.ACTION_DOWN -> {
            "down"
        }
        MotionEvent.ACTION_MOVE -> {
            "move"
        }
        MotionEvent.ACTION_UP -> {
            "up"
        }
        MotionEvent.ACTION_CANCEL -> {
            "cancel"
        }
        else -> event.action.toString()
    }
}

// 实现父view拦截down事件，move事件交给子View
class TestViewGroup(context: Context, attrs: AttributeSet?) : FrameLayout(context, attrs) {
    private var lastX = 0f

    // 是否是点击
    private var isClick = false

    // 最小滑动距离
    private val scaledTouchSlop = ViewConfiguration.get(getContext()).scaledTouchSlop

    override fun dispatchTouchEvent(event: MotionEvent): Boolean {
        println(">> parent dispatchTouchEvent ${getEventName(event)}")
//        when (event.action) {
//            // down事件必须return true，否则后续事件不会再传递给它
//            MotionEvent.ACTION_DOWN -> {
//                lastX = event.x
//                isClick = true
//                println(">> parent ")
//            }
//            MotionEvent.ACTION_MOVE -> {
//                isClick = abs(lastX - event.x) < scaledTouchSlop
//                println(">> parent move")
//            }
//
//            MotionEvent.ACTION_UP -> {
//                println(">> parent up")
//                if (isClick) {
//                    // 自己消费click事件
//                    Toast.makeText(context, "on parent Click", Toast.LENGTH_SHORT).show()
//                }
//            }
//        }
        return super.dispatchTouchEvent(event)
    }

    override fun onTouchEvent(event: MotionEvent): Boolean {
        println(">> parent onTouchEvent ${getEventName(event)}")
        return false
    }

    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
        if (ev.action == MotionEvent.ACTION_MOVE){
            return true
        }
        return super.onInterceptTouchEvent(ev)
    }

}